package a00_LeetCode.ArrayList;

/**
 * @Author quan
 * @Description 合并两个有序数组：给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2，
 * 另有两个整数 m 和 n ，分别表示 nums1 和 nums2 中的元素数目。
 * @Date 2023/3/27 17:39
 */
public class Num88_MergeTwoArray {
    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int i = 0, j = 0,k = 0;
        //定义一个空数组，比较给定的两个数组的值，将较小的值写入新数组
        int[] temp = new int[nums1.length];
        //此时两个给定的数组一定没有遍历完
        while (i<m && j<n){
            if(nums1[i] < nums2[j]){
                temp[k ++] = nums1[i ++];
            }else{
                temp[k ++] = nums2[j ++];
            }
        }
        //此时说明至少有一个数组遍历结束，只需要将剩下的没走完的值写到temp中
        //如果是nums1没走完
        while (i < m) {
            temp[k ++] = nums1[i ++];
        }
        while (j < n) {
            temp[k ++] = nums2[j ++];
        }
        // 此时两个数组的所有有效元素全部合并到了temp数组中，写回nums1
        for (int l = 0; l < nums1.length; l++) {
            nums1[l] = temp[l];
        }
    }
}
